import axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosResponse } from 'axios';
import { UniAdapter } from "uniapp-axios-adapter";

const instance : AxiosInstance = axios.create({
	baseURL: "http://gt.yftq.jchorn.com",
	timeout: 6000,
	adapter: UniAdapter,
})

// 请求拦截器：添加全局请求头、处理错误等（可按需调整）
instance.interceptors.request.use((config : InternalAxiosRequestConfig<any>) : any => {
	// 获取本地存储的token
	const token : string | null = uni.getStorageSync('token');
	// 如果存在token，则添加到请求头中
	if (token) {
		config.headers.token = `${token}`;
	}
	return config;
}, error => {
	console.error('Request Interceptor Error:', error);
	return Promise.reject(error);
});

// 响应拦截器：统一处理响应数据、错误等（可按需调整）
instance.interceptors.response.use((response : AxiosResponse<any>) : any => {
	// 检查响应状态码是否成功，一般情况下2xx系列代表成功
	if (response.status >= 200 && response.status < 300) {
		// ... 保留原有成功的处理逻辑 ...
		if ('code' in response.data && response.data.code === 200) {
			// 自定义状态码200表示请求成功
			return response.data.data;
		} else if ('code' in response.data && response.data.code === 401) {
			// 自定义状态码401表示用户未登录
			uni.removeStorageSync('token');
			uni.reLaunch({
				url: "/pages/login/index"
			})
		} else {
			uni.showToast({
				mask: true,
				icon: "none",
				position: "bottom",
				title: response.data.msg
			})
			const errorMessage = response.data.msg || '服务器内部错误';
			return Promise.reject(new Error(errorMessage));
		}
		// ... 保留其他自定义状态码处理逻辑 ...
	} else if (response.status >= 500 && response.status < 600) {
		// 处理所有5xx系列异常状态码
		uni.showToast({
			mask: true,
			icon: "none",
			position: "bottom",
			title: '服务器内部错误'
		})
		// 构造错误消息，并以Error形式抛出
		const errorMessage = '服务器内部错误';
		return Promise.reject(new Error(errorMessage));
	} else {
		// HTTP状态码非2xx系列，直接抛出错误
		const errorMessage = response.data.msg || `HTTP Error ${response.status}`;
		return Promise.reject(new Error(errorMessage));
	}
}, error => {
	// 打印响应拦截器捕获的错误
	console.error('Response Interceptor Error:', error);

	// 错误响应也以Error形式抛出
	return Promise.reject(error);
});
// 导出已配置好的axios实例
export default instance;